import type { App } from 'vue'
import { createPinia } from 'pinia'
import { createPersistedState } from 'pinia-plugin-persistedstate'

// 创建 Pinia 实例
const store = createPinia()

// 配置持久化插件
store.use(
  createPersistedState({
    // 默认存储 key 前缀
    key: id => `__persisted__${id}`,
    // 默认存储方式 - 适配 UniApp
    storage: {
      getItem: (key: string) => {
        try {
          return uni.getStorageSync(key)
        }
        catch (error) {
          console.error(`获取存储数据失败: ${key}`, error)
          return null
        }
      },
      setItem: (key: string, value: string) => {
        try {
          uni.setStorageSync(key, value)
        }
        catch (error) {
          console.error(`保存存储数据失败: ${key}`, error)
        }
      },
    },
    // 序列化配置
    serializer: {
      serialize: JSON.stringify,
      deserialize: (data: string) => {
        try {
          return JSON.parse(data)
        }
        catch (error) {
          console.error('反序列化数据失败:', error)
          return data
        }
      },
    },
    // 调试模式下打印持久化信息
    debug: import.meta.env.DEV,
  }),
)

// 开发环境下启用 devtools
if (import.meta.env.DEV) {
  // pinia.use(devtools) // 如果需要使用 devtools
}

// 安装 Pinia
export function setupStore(app: App<Element>) {
  app.use(store)
}

export default store

export * from './theme'
export * from './token'
